#include <cstdio>
#include <algorithm>
using namespace std;

long long n, m, t[1000001], d[1000001];

bool complare(long long a, long long b)
{
	return a > b;
}

long long bs_d(long long i, long long j, long long f)
{
	if (i >= j)
		return i;
	long long mid = (i + j) / 2;
	if (d[mid + 1] < f)
		return bs_d(i, mid, f);
	else
		return bs_d(mid + 1, j, f);
}

long long bs(long long i, long long j)
{
	if (i >= j)
		return i;
	long long mid = (i + j) / 2 + 1;
	long long temp = bs_d(1, n, mid);
	if (t[temp] - mid * temp >= m)
		return bs(mid, j);
	else
		return bs(i, mid - 1);
}

int main()
{
	freopen("init.in", "r", stdin);
	//freopen("cuttree.out","w",stdout);
	scanf("%lld%lld", &n, &m);
	for (int i = 1; i <= n; i++)
	{
		scanf("%lld", &d[i]);
	}
	sort(d + 1, d + n + 1, complare);
	d[n + 1] = 2147483647;
	for (int i = 1; i <= n; i++)
	{
		t[i] = t[i - 1] + d[i];
	}
	printf("%lld\n", bs(1, d[1]));
}